#ifndef _C_CODE_LOG_H_
#define _C_CODE_LOG_H_
#include "log.h"
#include "printf.h"
#include "SEGGER_RTT.h"
#if (__ARMCC_VERSION >= 6010050)           /* 使用AC6编译器时 */
#else
#pragma diag_suppress 870 //防止printf打印中文时报警告
#endif
/*
*示例：LOG("INFO", "This is a %s message with number %d", "test", 123);
*输出：[INFO|main@your_file.c:your_line_number] This is a test message with number 123
*
*
*/
#define LOG_ENABLE 1
// #define LOG_LEVEL 2    //ERROR, INFO

#define USE_SERIAL  1       // 日志使用串口输出
#define USE_SEGGER_RTT  2   // 日志使用RTT输出
#define LOG_MODE    USE_SERIAL  // 选择日志输出模式

// 尽量不要使用LOG()，因为串口输出和RTT输出的不一样
#if LOG_ENABLE == 1
    #if (LOG_MODE == USE_SERIAL)    // 使用串口输出
        #define LOG(level, format, ...) \
                printf("[%s|%s@%s:%d] " format "\r\n", \
                    level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ )
    #endif
    #if (LOG_MODE == USE_SEGGER_RTT)    // 使用RTT输出
        #define LOG(level, color, format, ...) \
                SEGGER_RTT_printf(0,"  %s[%s|%s@%s:%d]" format "\r\n%s", \
                                level,                                  \
                                color,                                  \
                                __func__, __FILE__, __LINE__,           \
                                ##__VA_ARGS__,                          \
                                RTT_CTRL_RESET)
    #endif
#else
    #define LOG(level, format, ...) 
#endif

#if LOG_LEVEL == 1
    #if (LOG_MODE == USE_SERIAL)    // 使用串口输出
        #define LOG_ERROR(format, ...) LOG("ERROR", format, ##__VA_ARGS__)
    #endif
    #if (LOG_MODE == USE_SEGGER_RTT)    // 使用RTT输出
        #define LOG_ERROR(format, ...) LOG(RTT_CTRL_TEXT_BRIGHT_RED, "ERROR", format, ##__VA_ARGS__)
    #endif
    #define LOG_INFO(format, ...) 
    #endif
#if LOG_LEVEL == 2
    #if (LOG_MODE == USE_SERIAL)    // 使用串口输出
        // #define LOG_ERROR(format, ...) LOG(("ERROR"), format, ##__VA_ARGS__) //“ERROR”加上括号，不然用不了
        // #define LOG_INFO(format, ...) LOG(("INFO"), format, ##__VA_ARGS__)
    #endif
    #if (LOG_MODE == USE_SEGGER_RTT)    // 使用串口输出
        #define LOG_ERROR(format, ...) LOG(RTT_CTRL_TEXT_BRIGHT_RED, ("ERROR"), format, ##__VA_ARGS__) //“ERROR”加上括号，不然用不了
        #define LOG_INFO(format, ...) LOG(RTT_CTRL_TEXT_BRIGHT_GREEN, ("INFO"), format, ##__VA_ARGS__)
    #endif
#endif

#endif // !_C_CODE_LOG_H_
